#!/usr/bin/perl
# Leandro Linardos | 89567

###############################################################################
#
# Código destinado a parseo de archivos de datos y carga de variables a 
# procesar.
#
###############################################################################

#
# Parsea el archivo maestro de agencias y carga un hash con los códigos de
# agencias para luego validar los filtros.
#
sub get_agencies {
    my $agencies = {};
    my $path = $AGENCIES_MASTER_FILE;
    open(AGENCIES, "<$path") or die "Error abriendo $path\n";
    while (my $line = <AGENCIES>) {
        chop($line);
        my @fields = split(",", $line);
        my $id = int($fields[0]);
        $agencies->{ $id } = 1;
    }
    close AGENCIES;
    return $agencies;
}


#
# Parsea el archivo maestro de agencias y carga un hash con los códigos de 
# de beneficios para luego validar los filtros. 
#
sub get_benefits {
    my $benefits = {}; 
    my $path = $BENEFITS_MASTER_FILE;
    open(BENEFITS, "<$path") or die "Error abriendo $path\n";
    while (my $line = <BENEFITS>) {
        chop($line);
        my @fields = split(",", $line);
        my $id = int($fields[0]);
        $benefits->{ $id } = 1;
    }
    close BENEFITS;
    return $benefits;
}


#
# Crea un array con el formato de reporte a partir de una linea de
# archivo de beneficiarios.
#
# args: 
#   0. linea a parsear.
#
# retorno: el array antes mencionado
#
sub get_formatted_array_to_report {
    my $line = $_[0];
    my $in_separator = ",";
    
    chop(%line);
    my @fields = split($in_separator, $line);

    # 10(codigo de benef), 0(agencia), 2(cuil), 5(apellido), 9(provincia),
    # 12(estado), 13(fecha efectiva de alta).
    my $benef_id = get_id_benef_by_code($fields[10]);
    my @report_array = ($benef_id, $fields[0], $fields[2], $fields[5],
                        $fields[9], $fields[12], $fields[13]);    

    return @report_array;
}


#
# Para la matriz uso un hash con key = provincia.benef y valor repeticiones. 
#
# args: 0. provincia
#       1. beneficio
#       2. referencia al hash de control
#       3. referencia al hash de provincias
#       4. referencia al hash beneficios
#
sub refresh_control_matrix {
    my $province = $_[0];
    my $benefit = $_[1];
    local *control = $_[2];
    local *provinces = $_[3];
    local *benefits = $_[4];
    
    %provinces->{ $province } = 1;
    %benefits->{ $benefit } = 1;

    my $key = "$province.$benefit";
    $control{$key}++;
}


#
# Verdadero si cumple alguno de los filtros indicados.
#
# args:
#   0. array con formato de reporte.
#
sub pass_filters {
    local *item = $_[0];
    my $benefit_ok = 0;
    my $agency_ok = 0; 
    my $state_ok = 0;

    # verifico filtros de beneficios
    if ( $BENEFITS_OPTION eq "" ) {
        $benefit_ok = 1;
    } elsif ( $BENEFITS_FILTERS{ $item[0] } ) {
        $benefit_ok = 1;
    }
    # verifico filtros de agencias
    if ( $AGENCIES_OPTION eq "" ) {
        $agency_ok = 1;
    } elsif ( defined $AGENCIES_FILTERS{ int($item[1]) } ) {
        $agency_ok = 1;
    }

    # verifico filtros de estado
    if ( $E_FLAG eq "") {
        $state_ok = 1;
    } elsif ( defined $STATE_FILTERS{ $item[6]} ) {
        $state_ok = 1;
    }
    
    return ($agency_ok and $benefit_ok and $state_ok);
}


# 
# Devuelve el nuevo valor del archivo de secuencia en base a los archivos
# anteriormente generados.
#
sub get_new_sequence_number {
    my $ls_ret = `cd $OUTPUT_DIR; ls -1 plist.* 2> /dev/null`;
    my @ls_array = split("\n", $ls_ret);
    sort @ls_array;
    my $last = pop @ls_array;
    $last = substr($last, length "plist.", length($last) - length("plist."));
    $last = sprintf "%04d", $last;
    $last++;
    return $last;
}

1; # return value = true pedido por Perl
